<?php

class utilActions extends sfActions{

    public function preExecute(){
        $service = new serviceAceptor();
        date_default_timezone_set($service->getTimezone());

        if(sfConfig::get('app_domain')=='server'){
            $simpleSAMLAuth = new SimpleSAML_Auth_Simple('default-sp');
            if (!$simpleSAMLAuth->isAuthenticated()){
                $this->redirect('logoutsaml/scriptLogOut');
            }
        }
    }

    public function executeIndex(sfWebRequest $request){
    
    }

    public function executeListar($creador,$rad_estado,$f_inicio,$f_fin, $rad_tipo=null){
        $lista = array();
        $count = 0;
        if($rad_tipo==0){/* acta */
            $c = new Criteria();

            if($rad_estado=="todos"){
                /* cuando se selecciona todos no se filtra nada */
            }else if($rad_estado=="pendientes"){
                $c1 = $c->getNewCriterion(TbDetalleActaContactoPeer::ESTADO,1);
                $c2 = $c->getNewCriterion(TbActaPeer::ESTADO, 1);
                $c1->addAnd($c2);
                $c->add($c1);
            }else if($rad_estado=="encurso"){
                $c1 = $c->getNewCriterion(TbDetalleActaContactoPeer::ESTADO, 2);
                $c2 = $c->getNewCriterion(TbActaPeer::ESTADO, 1);
                $c1->addAnd($c2);
                $c->add($c1);
            }else if($rad_estado=="archivados"){
                /* archivados es aceptados */
                /* archivados que no sea mayor a 10 */
//                $c1 = $c->getNewCriterion(TbDetalleActaContactoPeer::ESTADO, 10, Criteria::LESS_THAN);
//                $c2 = $c->getNewCriterion(TbActaPeer::ESTADO, 2);
//                $c1->addAnd($c2);
//                $c->add($c1);
                $c->add(TbActaPeer::ESTADO, 2);
            }//else if($rad_estado=="eliminados"){
                /* se compara si es mayor a 10, porque el atributo "estado" se compone de 2 caracteres (números)
                 * el primero simboliza el estado en que se encuentra: 1.-pendiente; 2.- aprobado; 3.- desaprobado
                 * , si se le aumenta un 4 es porque ha sido eliminado por el usuario que tiene el 4 al final del
                 * estado */
//                $c->add(TbDetalleActaContactoPeer::ESTADO, 10, Criteria::GREATER_THAN);
//            }

            if($f_inicio != "" && $f_fin != ""){
                $c1 = $c->getNewCriterion(TbActaPeer::FECHA_REGISTRO, $f_inicio, Criteria::GREATER_EQUAL);
                $c2 = $c->getNewCriterion(TbActaPeer::FECHA_REGISTRO, $f_fin,  Criteria::LESS_EQUAL);

                $c1->addAnd($c2);
                $c->add($c1);
                $c->addDescendingOrderByColumn(TbActaPeer::FECHA_REGISTRO);
            }

            if($creador != 0){
                $c->add(TbActaPeer::CREADOR_ID,$creador);
            }

            $c->addSelectColumn(TbActaPeer::ID);
            $c->addSelectColumn(TbActaPeer::NOMBRE);
            $c->addSelectColumn(TbUsuarioPeer::NOMBRE);
            $c->addSelectColumn(TbActaPeer::FECHA_HORA_REGISTRO);
            $c->addSelectColumn(TbDetalleActaContactoPeer::ESTADO);

            $c->add(TbDetalleActaContactoPeer::USUARIO_ID,$this->getUser()->getAttribute('ses_user_id'));
            $c->addJoin(TbUsuarioPeer::ID, TbDetalleActaContactoPeer::CREADOR_ID );
            $c->addJoin(TbActaPeer::ID, TbDetalleActaContactoPeer::ACTA_ID);
            $c->addDescendingOrderByColumn(TbActaPeer::FECHA_HORA_REGISTRO);

            $lista = TbActaPeer::doSelectStmt($c);
            $count = TbActaPeer::doCount($c);

        }else if($rad_tipo==1){/* acuerdo */
            $c = new Criteria();

            if($rad_estado=="todos"){
                /* cuando se selecciona todos no se filtra nada */
            }else if($rad_estado=="pendientes"){
                $c1 = $c->getNewCriterion(TbDetalleAcuerdoContactoPeer::ESTADO, 1);
                $c2 = $c->getNewCriterion(TbAcuerdoPeer::ESTADO, 1);
                $c1->addAnd($c2);
                $c->add($c1);
            }else if($rad_estado=="encurso"){
                $c1 = $c->getNewCriterion(TbDetalleAcuerdoContactoPeer::ESTADO, 2);
                $c2 = $c->getNewCriterion(TbAcuerdoPeer::ESTADO, 1);
                $c1->addAnd($c2);
                $c->add($c1);
            }else if($rad_estado=="archivados"){
                /* archivados es aceptados */
                /* archivados que no sea mayor a 10 */
//                $c1 = $c->getNewCriterion(TbDetalleAcuerdoContactoPeer::ESTADO, 10, Criteria::LESS_THAN);
//                $c2 = $c->getNewCriterion(TbAcuerdoPeer::ESTADO, 2);
//                $c1->addAnd($c2);
//                $c->add($c1);
                $c->add(TbAcuerdoPeer::ESTADO, 2);
            }//else if($rad_estado=="eliminados"){
                /* se compara si es mayor a 10, porque el atributo "estado" se compone de 2 caracteres (números)
                 * el primero simboliza el estado en que se encuentra: 1.-pendiente; 2.- aprobado; 3.- desaprobado
                 * , si se le aumenta un 4 es porque ha sido eliminado por el usuario que tiene el 4 al final del
                 * estado */
//                $c->add(TbDetalleAcuerdoContactoPeer::ESTADO, 10, Criteria::GREATER_THAN);
//                $c->add(TbDetalleAcuerdoContactoPeer::CREADOR_ID, $this->getUser()->getAttribute('ses_user_id'));
//            }

            if($f_inicio != "" && $f_fin != ""){
                $c1 = $c->getNewCriterion(TbAcuerdoPeer::FECHA_REGISTRO, $f_inicio, Criteria::GREATER_EQUAL);
                $c2 = $c->getNewCriterion(TbAcuerdoPeer::FECHA_REGISTRO, $f_fin,  Criteria::LESS_EQUAL);
                $c1->addAnd($c2);
                $c->add($c1);
                $c->addDescendingOrderByColumn(TbAcuerdoPeer::FECHA_REGISTRO);
            }

            if($creador != 0){
                $c->add(TbAcuerdoPeer::CREADOR_ID,$creador);
            }

            $c->addSelectColumn(TbAcuerdoPeer::ID);
            $c->addSelectColumn(TbAcuerdoPeer::NOMBRE);
            $c->addSelectColumn(TbUsuarioPeer::NOMBRE);
            $c->addSelectColumn(TbAcuerdoPeer::FECHA_HORA_REGISTRO);
            $c->addSelectColumn(TbDetalleAcuerdoContactoPeer::ESTADO);

            $c->add(TbDetalleAcuerdoContactoPeer::USUARIO_ID, $this->getUser()->getAttribute('ses_user_id'));
            $c->addJoin(TbUsuarioPeer::ID, TbDetalleAcuerdoContactoPeer::USUARIO_ID);
            $c->addJoin(TbAcuerdoPeer::ID, TbDetalleAcuerdoContactoPeer::ACUERDO_ID);
            $c->addDescendingOrderByColumn(TbAcuerdoPeer::FECHA_HORA_REGISTRO);

            $lista = TbDetalleAcuerdoContactoPeer::doSelectStmt($c);
            $count = TbDetalleAcuerdoContactoPeer::doCount($c);
        }
        return array("lista"=>$lista, "count"=>$count);
    }

    public function executeListar_categoria(){
        $criteria = new Criteria();
        $criteria->add(TbDetalleUsuarioCategoriaPeer::USUARIO_ID,$this->getUser()->getAttribute('ses_user_id'));
        return TbDetalleUsuarioCategoriaPeer::doSelect($criteria);
    }

    public function executeListar_documentos_avanzado(sfWebRequest $request){
        //puede ser acuerdo o acta
        $tipo_documento=$request->getParameter('tipo_documento');
        $etiqueta = $request->getParameter('etiqueta_id');


        $ck_date_inicial   = $request->getParameter('ck_date_inicial');
        $ck_date_final = $request->getParameter('ck_date_final');


        $rad_estado=$request->getParameter('rad_estado');   // 1 = pendiente / 2 = evaluado
        $id_user = $this->getUser()->getAttribute('ses_user_id');


        if($rad_estado=="pendientes"){
            $query_estado_acuerdo = ' and (d_acuerdo.estado = 1 and acuerdo.estado =1 )';
            $query_estado_acta    = ' and (d_acta.estado    = 1 and acta.estado =1    )';

        }else if($rad_estado=="encurso"){
            $query_estado_acuerdo = ' and (d_acuerdo.estado = 2 and acuerdo.estado =1 )';
            $query_estado_acta    = ' and (d_acta.estado    = 2 and acta.estado =1    )';

       }else{
            $query_estado_acuerdo = ' and  acuerdo.estado =2 ';
            $query_estado_acta    = ' and  acta.estado =2    ';

       }


        $connection = Propel::getConnection();


        $query_etiqueta_acuerdo = ' )';
        $query_etiqueta_acta    = ' )';


        if($etiqueta!=""){
          $query_etiqueta_acuerdo=   ' and etiqueta.categoria_id ='.$etiqueta. ')';
          $query_etiqueta_acta =     ' and etiqueta_acta.categoria_id ='.$etiqueta. ')';
        }

        if($tipo_documento!=""){

          if($etiqueta!=""){
                 $tbqueryacuerdo        = ' tb_detalle_acuerdo_categoria etiqueta, ';
                 $relationqueryacuerdo  = ' d_acuerdo.acuerdo_id = etiqueta.acuerdo_id and ';

                 $tbqueryacta       = ' tb_detalle_acta_etiqueta   etiqueta_acta, ';
                 $relationqueryacta  = ' d_acta.acta_id = etiqueta_acta.acta_id and ';

                 $query_etiqueta_acuerdo=   ' and etiqueta.categoria_id ='.$etiqueta.' ';
                 $query_etiqueta_acta =     ' and etiqueta_acta.categoria_id ='.$etiqueta.' ';
            }else{
                 $tbqueryacuerdo = '';
                $relationqueryacuerdo = '';
                $tbqueryacta = '';
                $relationqueryacta = '';
                 $query_etiqueta_acuerdo = '';
                 $query_etiqueta_acta    = '';
            }

            $tipo_doc = $tipo_documento;

           if($tipo_documento=="acuerdo"){

               if($ck_date_inicial!="" && $ck_date_final!= ""){
                 $sql_fecha = ' and acuerdo.fecha_registro BETWEEN "'.$ck_date_inicial.'" AND "'.$ck_date_final.'"';
                }else{
                    $sql_fecha  = '';
                }

           $query = 'select acuerdo.id as pkdocumento,d_acuerdo.estado as estado_u, 1 as documento , acuerdo.fecha_hora_registro as fecha , acuerdo.nombre as titulo ,usuario.nombre as autor
                     from '.$tbqueryacuerdo.'tb_detalle_acuerdo_contacto d_acuerdo,
                           tb_acuerdo acuerdo,
                           tb_usuario usuario
                     where acuerdo.id =d_acuerdo.acuerdo_id and'.$relationqueryacuerdo.'
                           usuario.id = acuerdo.creador_id and
                           d_acuerdo.usuario_id ='.$id_user.$sql_fecha.$query_estado_acuerdo.$query_etiqueta_acuerdo.' order by fecha desc';
            }
            if($tipo_documento=="acta"){

               if($ck_date_inicial!="" && $ck_date_final!= ""){
                 $sql_fecha = ' and acta.fecha_registro BETWEEN "'.$ck_date_inicial.'" AND "'.$ck_date_final.'"';
                }else{
                    $sql_fecha  = '';
                }

            $query = 'select acta.id as pkdocumento,d_acta.estado as estado_u, 2 as documento , acta.fecha_hora_registro as fecha , acta.nombre as titulo,usuario.nombre as autor
                      from '.$tbqueryacta.'
                           tb_detalle_acta_contacto     d_acta,
                           tb_acta   acta,
                           tb_usuario usuario
                      where  acta.id  =d_acta.acta_id and'.$relationqueryacta.'
                           usuario.id = acta.creador_id          and
                           d_acta.usuario_id ='.$id_user.$sql_fecha.$query_estado_acta.$query_etiqueta_acta.' order by fecha desc';
            }

        }else{

            if($ck_date_inicial!="" && $ck_date_final!= ""){
                    $sql_fecha_acta    = ' and acta.fecha_registro BETWEEN "'.$ck_date_inicial.'" AND "'.$ck_date_final.'"';
                    $sql_fecha_acuerdo = ' and acuerdo.fecha_registro BETWEEN "'.$ck_date_inicial.'" AND "'.$ck_date_final.'"';

            }else{
                    $sql_fecha_acta  = '';
                    $sql_fecha_acuerdo = '';
                }

         $tipo_doc = 'acuerdos-actas';
         $query = '(select acuerdo.id as pkdocumento, 1 as documento , acuerdo.fecha_hora_registro as fecha , acuerdo.nombre as titulo ,usuario.nombre as autor,d_acuerdo.estado as estado_u
          from   tb_detalle_acuerdo_categoria etiqueta,
               tb_detalle_acuerdo_contacto d_acuerdo,
               tb_acuerdo acuerdo,
               tb_usuario usuario
         where  acuerdo.id =d_acuerdo.acuerdo_id           and
               d_acuerdo.acuerdo_id = etiqueta.acuerdo_id and
               usuario.id = acuerdo.creador_id          and
               d_acuerdo.usuario_id ='.$id_user.$sql_fecha_acuerdo.$query_estado_acuerdo.$query_etiqueta_acuerdo.
        ' union
         (select acta.id as pkdocumento, 2 as documento , acta.fecha_hora_registro as fecha , acta.nombre as titulo,usuario.nombre as autor,d_acta.estado as estado_u
          from   tb_detalle_acta_etiqueta   etiqueta_acta,
               tb_detalle_acta_contacto     d_acta,
               tb_acta   acta,
               tb_usuario usuario
         where  acta.id  =d_acta.acta_id               and
               d_acta.acta_id = etiqueta_acta.acta_id and
               usuario.id = acta.creador_id         and
               d_acta.usuario_id ='.$id_user.$sql_fecha_acta.$query_estado_acta.$query_etiqueta_acta.
         ' order by fecha desc';
        }


         $statement = $connection->prepare($query);
         $statement->execute();
         $lst = null;
         while ($resultset = $statement->fetch(PDO::FETCH_OBJ))
         {
             if($resultset->documento=="1"){
                 $documento = 'acuerdo';
             }else{
                 $documento = 'acta';
             }
             $obj = array($resultset->pkdocumento,$documento,$resultset->fecha,$resultset->titulo,$resultset->autor,$resultset->estado_u);
             $lst[] = $obj;
         }
         $this->list     =$lst;
         $this->tipo_doc = $tipo_doc;


         $this->query = $query;

         /*
          SELECT *
          FROM  tb_detalle_acuerdo_categoria etiqueta,
                tb_acuerdo acuerdo ,
                tb_detalle_acuerdo_contacto detalle
          where detalle.usuario_id = 9 and
                etiqueta.categoria_id = 8 and
                detalle.acuerdo_id = etiqueta.acuerdo_id and
                acuerdo.id = detalle.acuerdo_id;
          */
    }
  
    /*********************************************************************
                        FILTRO DE DOCUMENTOS
     *********************************************************************/
    public function executeListar_documentos(sfWebRequest $request){
        $rad_tipo=$request->getParameter('rad_tipo');       // 1 = acuerdo; 0 = acta
        $rad_estado=$request->getParameter('rad_estado');   // 1 = pendiente; 2 = evaluado

        $f_inicio = $request->getParameter('ck_date_inicial');
        $f_fin = $request->getParameter('ck_date_final');
       
        $list_documento = $this->executeListar(0,$rad_estado,$f_inicio,$f_fin, $rad_tipo);

        // Envia Variables a Mostrar
        $this->list_documento = $list_documento['lista'];
        $this->cant_documento = $list_documento['count'];
        $this->tipo = $rad_tipo;
    }

 public function executeListar_all_documentos(sfWebRequest $request){

      //Recoge parametros
     
   // $rad_estado=$request->getParameter('rad_estado');   // 1 = pendiente / 2 = evaluado

      // Inicializa Variables
      /* En caso se alla seleccionado un acuerdo entra a la primera condicion
       * En caso se alla seleccionado un acuerdo entra a la segunda condicion
       * Tambien recibe el estado del documento ya sea acuerdo o acta
       */
 /* 
        $list_acuerdo_documento = $this->executeListar_acuerdos(0);
        $list_acta_documento    = $this->executeListar_acta(0);

      // Envia Variables a Mostrar
        $this->list_documento = $list_documento;
        $this->cant_documento = $cant_documento;
        $this->tipo = $rad_tipo;*/


  }

function addList($list,$id_acuerdo,$titulo,$autor,$fecha){    
    $lst_aux = $list;   
    $obj = array($id_acuerdo,$titulo,$autor,$fecha);
    
    $lst_aux[] = $obj; 
    return $lst_aux;    
}


/*********************************************************************
                    MANTENIMIENTO DE CATEGORIAS
 *********************************************************************/
  private function executeInsertCategoria($id_user,$name_etiqueta){
      $new_user_categoria = new TbDetalleUsuarioCategoria();
      $new_user_categoria->setUsuarioId($id_user);
      $new_user_categoria->setNombreCategoria($name_etiqueta);
      $new_user_categoria->save();
      return $new_user_categoria->getId();
  }
 
  public function executeAgregar_categoria(sfWebRequest $request){

    $txt_nombre_categoria=$request->getParameter('txt_nombre_categoria');

    $val_string = new sfValidatorString(array('required' => true));
    $exito =0;
    try {
      $val_string->clean($txt_nombre_categoria);$exito++;
    } catch (sfValidatorError $e) {}

    if($exito == 1){
        $this->executeInsertCategoria($this->getUser()->getAttribute('ses_user_id'), $txt_nombre_categoria);
    }
      $list_categoria=$this->executeListar_categoria();
      $this->list_categoria=$list_categoria;

     return $this->getUser()->setAttribute('ses_categoria',$list_categoria);

  }

 public function executeListar_categoria_ajax(sfWebRequest $request){
      $list_categoria=$this->executeListar_categoria();
      $this->list_categoria=$list_categoria;
  }

  public function executeEditar_categoria(sfWebRequest $request){

      $txt_categoria=$request->getParameter('txt_categoria');
      $txt_id_categoria=$request->getParameter('txt_id_categoria');

      $upd_user_categoria = TbDetalleUsuarioCategoriaPeer::retrieveByPK($txt_id_categoria);
      $upd_user_categoria->setNombreCategoria($txt_categoria);
      $upd_user_categoria->save();

      $list_categoria=$this->executeListar_categoria();
      $this->list_categoria=$list_categoria;

      return $this->getUser()->setAttribute('ses_categoria',$list_categoria);
  }

  public function executeEliminar_categoria(sfWebRequest $request){

      $txt_id_categoria=$request->getParameter('txt_id_categoria');

      $del_user_categoria = TbDetalleUsuarioCategoriaPeer::retrieveByPK($txt_id_categoria);
      $del_user_categoria->delete();

      $list_categoria=$this->executeListar_categoria();
      $this->list_categoria=$list_categoria;

      return $this->getUser()->setAttribute('ses_categoria',$list_categoria);
  }








/*********************************************************************
                    DETALLE ACUERDO DE CONTACTOS
 *********************************************************************/

  public function executeAgregar_detalle_contacto_acuerdo(sfWebRequest $request)
  {

    $request->setRequestFormat('json');
    $validator = true;
    //$ses_detalle=$this->getUser()->getAttribute('ses_detalle_acuerdo_contacto',null);
    $ses_detalle = $this->getUser()->getAttribute('ses_detalle_acuerdo_contacto');
    $txt_acuerdo_cont_cor = $request->getParameter('txt_acuerdo_cont_cor');

    //divide el texto recibido en un arreglo de correos, no toma en cuenta los elementos vacíos
    $emails = preg_split('/,/', $txt_acuerdo_cont_cor, -1, PREG_SPLIT_NO_EMPTY);
    
    $success = array();
    $message = array();
    $code = array();

    if($txt_acuerdo_cont_cor!=''){
        if(!$this->getUser()->hasAttribute('ses_user_id')){
            $success[] = false;
            $message[] = 'Session expired';
            $code[] =  88000;
        }else{
            foreach($emails as $email){
                $email = trim($email);
                $val_string = new sfValidatorString(array('required' => true));
                $val_correo = new sfValidatorEmail();

                $error = 0;

                try{
                    $val_correo->clean($email);
                    $this->getUser()->setFlash('msj_acuerdo_cont_cor_ok',$email);
                }catch(sfValidatorError $e){
                    $this->getUser()->setFlash('msj_acuerdo_cont_cor_ko','Incorrecto');
                    $error++;
                }

                if($error==0)
                {
                    if($this->getUser()->hasAttribute('ses_detalle_acuerdo_contacto')){
                        if(in_array($email, $ses_detalle)){
                            $success[] = false;
                            $message[] = 'El email ya se encuentra registrado';
                            $code[] = 25300;
                        }else{
                            $success[] = true;
                            $message[] = 'Se agrego con exito';
                            $code[] = 25000;

                            $ses_detalle[] = $email;
                            $this->getUser()->setAttribute('ses_detalle_acuerdo_contacto', $ses_detalle);
                        }
                    }else{
                        $success[] = true;
                        $message[] = 'Se agrego con exito';
                        $code[] = 25000;

                        $ses_detalle[] = $email;
                        $this->getUser()->setAttribute('ses_detalle_acuerdo_contacto', $ses_detalle);
                    }
                }else{
                    $success[] = false;
                    $message[] = 'Email no valido';
                    $code[] = 25100;
                }
            }
        }
    }else{
        $success[] = false;
        $message[] = 'Ingrese por lo menos un email';
        $code[] = 25400;
    }

    $this->success = $success;
    $this->message = $message;
    $this->code =  $code;
    $this->emails = $emails;

    return sfView::SUCCESS;

  }


public function executeEliminar_detalle_contacto_acta(sfWebRequest $request)
{
    $request->setRequestFormat('json');
    $ses_detalle=$this->getUser()->getAttribute('ses_detalle_acta_contacto','nada');
    $item = $request->getParameter('item_contacto_acta');
    $key = array_search($item, $ses_detalle);
    unset($ses_detalle[$key]);
    $this->getUser()->setAttribute('ses_detalle_acta_contacto',$ses_detalle);

}
public function executeEliminar_detalle_contacto_acuerdo(sfWebRequest $request)
{
    $request->setRequestFormat('json');
    $ses_detalle = $this->getUser()->getAttribute('ses_detalle_acuerdo_contacto');
    $item = $request->getParameter('item_contacto_acuerdo');//esto es el correo completo
    //$lst = $ses_detalle;
    //buscar indice con el texto igual al correo
    $key = array_search($item, $ses_detalle);
    //eliminar el elemento en ese indice
    unset($ses_detalle[$key]);

    $this->getUser()->setAttribute('ses_detalle_acuerdo_contacto',$ses_detalle);
}



  
/*********************************************************************
                    DETALLE ACTA DE CONTACTOS
 *********************************************************************/

  public function executeAgregar_detalle_contacto_acta(sfWebRequest $request)
  {

    $request->setRequestFormat('json');
   
    //$ses_detalle=$this->getUser()->getAttribute('ses_detalle_acuerdo_contacto',null);
    $ses_detalle = $this->getUser()->getAttribute('ses_detalle_acta_contacto');
    $txt_acta_cont_cor = $request->getParameter('txt_acta_cont_cor');

    
    //divide el texto recibido en un arreglo de correos, no toma en cuenta los elementos vacíos
    $emails = preg_split('/,/', $txt_acta_cont_cor, -1, PREG_SPLIT_NO_EMPTY);

    $success = array();
    $message = array();
    $code = array();

    if($txt_acta_cont_cor!=''){
        if(!$this->getUser()->hasAttribute('ses_user_id')){
            $success[] = false;
            $message[] = 'Session expired';
            $code[] =  88000;
        }else{
            foreach($emails as $email){
                $email = trim($email);
                $val_string = new sfValidatorString(array('required' => true));
                $val_correo = new sfValidatorEmail();

                $error = 0;

                try{
                    $val_correo->clean($email);
                    $this->getUser()->setFlash('msj_acuerdo_cont_cor_ok',$email);
                }catch(sfValidatorError $e){
                    $this->getUser()->setFlash('msj_acuerdo_cont_cor_ko','Incorrecto');
                    $error++;
                }

                if($error==0)
                {
                    if($this->getUser()->hasAttribute('ses_detalle_acta_contacto')){
                        if(in_array($email, $ses_detalle)){
                            $success[] = false;
                            $message[] = 'El email ya se encuentra registrado';
                            $code[] = 25300;
                        }else{
                            $success[] = true;
                            $message[] = 'Se agrego con exito';
                            $code[] = 25000;

                            $ses_detalle[] = $email;
                            $this->getUser()->setAttribute('ses_detalle_acta_contacto', $ses_detalle);
                        }
                    }else{
                        $success[] = true;
                        $message[] = 'Se agrego con exito';
                        $code[] = 25000;

                        $ses_detalle[] = $email;
                        $this->getUser()->setAttribute('ses_detalle_acta_contacto', $ses_detalle);
                    }
                }else{
                    $success[] = false;
                    $message[] = 'Email no valido';
                    $code[] = 25100;
                }
            }
        }
    }else{
        $success[] = false;
        $message[] = 'Ingrese por lo menos un email';
        $code[] = 25400;
    }

    $this->success = $success;
    $this->message = $message;
    $this->code =  $code;
    $this->emails = $emails;

    return sfView::SUCCESS;



}


  
/*********************************************************************
                    DETALLE ACTA DE TAREAS
 *********************************************************************/
  
  public function executeAgregar_detalle_tarea_acta(sfWebRequest $request)
  {
    //MOSTRANDO DETALLE DE CONTACTOS DE ACTA
    $ses_detalle=$this->getUser()->getAttribute('ses_detalle_acta_tarea','nada');

    $txt_acta_texto = $request->getParameter('txt_acta_texto');
    $txt_acta_nombre = $request->getParameter('txt_acta_nombre');
    $txt_acta_fecha = $request->getParameter('txt_acta_fecha');

    $val_string = new sfValidatorString(array('required' => true));

    $exito =0;
    try {
      $val_string->clean($txt_acta_texto);$exito++;
    } catch (sfValidatorError $e) {}
    try {
      $val_string->clean($txt_acta_nombre);$exito++;
    } catch (sfValidatorError $e) {}
    try {
      $val_string->clean($txt_acta_fecha);$exito++;
    } catch (sfValidatorError $e) {}

    $lst = array();
    if($exito == 3){
        if($ses_detalle == "nada"){
            $lst = null;
            $item=count($lst);
            $obj = array($txt_acta_texto,$txt_acta_nombre,$txt_acta_fecha,$item);
            $lst[] = $obj;
            $this->lista=$lst;
        }else{
            $lst = $ses_detalle;
            /* 201 es el limite de contactos */
            if(count($lst)<201){
                $item=count($lst);
                $obj = array($txt_acta_texto,$txt_acta_nombre,$txt_acta_fecha,$item);
                $lst[] = $obj;
                $this->lista=$lst;
            }else{
                $this->lista=$ses_detalle;
            }
        }
        $this->getUser()->setAttribute('ses_detalle_acta_tarea',$lst);
        return sfView::SUCCESS;
    }else{
         if($ses_detalle == "nada"){
            $lst = null;
         }else{
            $lst = $ses_detalle;
         }
         $this->lista=$lst;
         return sfView::ERROR;
    }
  }

public function executeEliminar_detalle_tarea_acta(sfWebRequest $request)
{
    $ses_detalle=$this->getUser()->getAttribute('ses_detalle_acta_tarea','nada');
    $item = $request->getParameter('item_tarea_acta');

    $lst = $ses_detalle;

    unset($lst[$item]);
    $this->lista=$lst;
    return $this->getUser()->setAttribute('ses_detalle_acta_tarea',$lst);
}

  


/*********************************************************************
                    REGISTRAR ACUERDO
 *********************************************************************/
private function updateEstadoCuentaPaquete(){
        $estadoCuentaBean  =   $this->getUser()->getAttribute('ses_estado_cuenta_paquete',null);
         if($estadoCuentaBean!=null)
         {
            $estadoCuentaBean->setValorActual($estadoCuentaBean->getValorActual()-1);
            $estadoCuentaBean->save();
            $this->getUser()->getAttribute('ses_estado_cuenta_paquete',$estadoCuentaBean);
         }
        
}


public function executeRegistrar_acuerdo(sfWebRequest $request)
{
     

    //Recupera Parametros
      $ses_detalle= $this->getUser()->getAttribute('ses_detalle_acuerdo_contacto','nada');
      
      $lista_categoria         =  $request->getParameter('lista_categoria');
      $txt_acuerdo_titulo      =  $request->getParameter('txt_acuerdo_titulo');
      $txta_acuerdo_texto      =  $request->getParameter('txta_acuerdo_texto');
      $rad_acuerdo_aprobacion  =  $request->getParameter('rad_acuerdo_aprobacion');
      $chk_categoria           =  $request->getParameter('txt_etiquetas');
      $type                    =  $request->getParameter('type');
      $ipuser                  =  $request->getParameter('userip');
    //Validadores
      $val_string = new sfValidatorString(array('required' => true));

    //Validar datos
      $exito=0;
      $resultado = "";
      try {
          $val_string->clean($txt_acuerdo_titulo);
          $this->getUser()->setFlash('msj_nombre_ok',$txt_acuerdo_titulo);$exito++;
      } catch (sfValidatorError $e) {$this->getUser()->setFlash('msj_nombre_ko','Requerido');}

      if($type=="profesional")
      {
             $exito++;
      }
      else
      {
           try {
              $val_string->clean($txta_acuerdo_texto);
              $this->getUser()->setFlash('msj_nombre_ok',$txta_acuerdo_texto);$exito++;
          } catch (sfValidatorError $e) {$this->getUser()->setFlash('msj_nombre_ko','Requerido');}

      }
    
      $creo_etiquetas = "no";
      if($exito == 2 && $ses_detalle!= 'nada')
      {
          $obj_acuerdo = new TbAcuerdo();
          $obj_acuerdo->setCreadorId($this->getUser()->getAttribute('ses_user_id'));
          $obj_acuerdo->setNombre($txt_acuerdo_titulo);
    
          $obj_acuerdo->setTexto($txta_acuerdo_texto);
          $obj_acuerdo->setRespuesta($rad_acuerdo_aprobacion);
          $obj_acuerdo->setFechaRegistro(date('Y-m-j'));
          $obj_acuerdo->setHoraRegistro(date('g:i:s'));
          $obj_acuerdo->setFechaHoraRegistro(date('Y-m-d H:i:s'));
       
          $obj_acuerdo->setEstado('1');
          $obj_acuerdo->save();

            if($type=="profesional"){
                $name_file_load =  $request->getParameter('name_file');
                $obj_acuerdo->setTipoAcuerdo('2');
                $name_file_load =  $request->getParameter('name_file');
                $pk = $this->getUser()->getAttribute('ses_user_id');
                if($name_file_load!="null"){
                   $obj_acuerdo->setPkFile($name_file_load);
                }else{
                   $obj_acuerdo->setPkFile("null");
                }

            }else{
               $obj_acuerdo->setTipoAcuerdo('1');
            }

          $obj_acuerdo->save();


          $id_acuerdo = $obj_acuerdo->getId();
          $array_correos = array();

          $txt_acuerdo_cont_nom="";$txt_acuerdo_cont_cor="";$item=0;

          $array_creator = array($txt_acuerdo_cont_nom,$txt_acuerdo_cont_cor,$item);
          $ses_detalle[] = $array_creator;

          $cont = 0;
          $estado = '1';
        
          foreach ($ses_detalle as $row){
              $estado = '1';
              $cont++;
              $detalle_acuerdo_contacto = new TbDetalleAcuerdoContacto();
              $detalle_acuerdo_contacto->setAcuerdoId($id_acuerdo);
              $detalle_acuerdo_contacto->setCreadorId($this->getUser()->getAttribute('ses_user_id'));
              $criterio_buscar_usuario = new Criteria();
              $criterio_buscar_usuario->add(TbUsuarioPeer::CORREO,'%'.$row.'%',Criteria::LIKE);
              $obj_user = TbUsuarioPeer::doSelectOne($criterio_buscar_usuario);
              
                  //para que en ultimo recorrido guarde el detalle del
                  //creador
                  if($cont ==  count($ses_detalle)){
                    $detalle_acuerdo_contacto->setUsuarioId($this->getUser()->getAttribute('ses_user_id'));
                    $detalle_acuerdo_contacto->setNombre($this->getUser()->getAttribute('ses_user_nombre'));
                    $detalle_acuerdo_contacto->setCorreo($this->getUser()->getAttribute('ses_user_correo'));
                    $detalle_acuerdo_contacto->setIp($ipuser);
                    $detalle_acuerdo_contacto->setFechaRevision(date('Y-m-j'));
                    $detalle_acuerdo_contacto->setFechaHoraRevision(date('Y-m-d H:i:s'));
                    $detalle_acuerdo_contacto->setHoraRevision(date('g:i:s'));
                    $estado='2';
                  //si encuentro al usuario en aceptor 
                  }elseif(is_object($obj_user)){
                    $detalle_acuerdo_contacto->setUsuarioId($obj_user->getId());
                    $detalle_acuerdo_contacto->setNombre($obj_user->getNombre());
                    $detalle_acuerdo_contacto->setCorreo($obj_user->getCorreo());
                    $array_correos[] = $obj_user->getCorreo();
                  }
                  else{
                    //si no lo encuentro vamos a revisar si la el email esta asociado
                    //a otra cuenta 
                    $criterio_buscar_usuario->clear();
                    $criterio_buscar_usuario->add(TbAssociateAccountPeer::ACCOUNTS,'%'.$row.'%',Criteria::LIKE);
                    $account = TbAssociateAccountPeer::doSelectOne($criterio_buscar_usuario);

                    if(is_object($account)){
                        $detalle_acuerdo_contacto->setUsuarioId($account->getTbUsuario()->getId());
                        $detalle_acuerdo_contacto->setNombre($account->getTbUsuario()->getNombre());
                        $detalle_acuerdo_contacto->setCorreo($account->getTbUsuario()->getCorreo());
                        $array_correos[] = $row;                        
                    }else{
                        $detalle_acuerdo_contacto->setNombre($row);
                        $detalle_acuerdo_contacto->setCorreo($row);
                        $array_correos[] = $row;
                    }
                   
                  }
                  
              $detalle_acuerdo_contacto->setEstado($estado);
              $detalle_acuerdo_contacto->save();

          }

        $array_categoria = explode(',', $chk_categoria);
        $creo_etiquetas = "no";
        $criterio_etiqueta = new Criteria();
        $etiqueta = 'todos';
        $criterio_etiqueta->add(TbDetalleUsuarioCategoriaPeer::NOMBRE_CATEGORIA,'%'.$etiqueta.'%',Criteria::LIKE);
        $criterio_etiqueta->add(TbDetalleUsuarioCategoriaPeer::USUARIO_ID,$this->getUser()->getAttribute('ses_user_id'));
        $cantidad_etiquetas = TbDetalleUsuarioCategoriaPeer::doCount($criterio_etiqueta);
        if($cantidad_etiquetas>0){
        $etiqueta = TbDetalleUsuarioCategoriaPeer::doSelectOne($criterio_etiqueta);
        $etiqueta_id = $etiqueta->getId();
        }else{
        $etiqueta_id=  $this->executeInsertCategoria($this->getUser()->getAttribute('ses_user_id'), $etiqueta);
        $creo_etiquetas="si";
        }
        $detalle_acuerdo_categoria = new TbDetalleAcuerdoCategoria();
        $detalle_acuerdo_categoria->setAcuerdoId($id_acuerdo);
        $detalle_acuerdo_categoria->setCategoriaId($etiqueta_id);
        $detalle_acuerdo_categoria->save();
        $criterio_etiqueta->clear();

        if($chk_categoria!=""){ 
        
        for ($index = 0; $index < count($array_categoria); $index++) {
            $etiqueta = trim($array_categoria[$index]);
            $criterio_etiqueta->add(TbDetalleUsuarioCategoriaPeer::NOMBRE_CATEGORIA,'%'.$etiqueta.'%',Criteria::LIKE);
            $criterio_etiqueta->add(TbDetalleUsuarioCategoriaPeer::USUARIO_ID,$this->getUser()->getAttribute('ses_user_id'));
            $cantidad_etiquetas = TbDetalleUsuarioCategoriaPeer::doCount($criterio_etiqueta);

            if($cantidad_etiquetas>0){
             $etiqueta = TbDetalleUsuarioCategoriaPeer::doSelectOne($criterio_etiqueta);
             $etiqueta_id = $etiqueta->getId();
            }else{
            $etiqueta_id=  $this->executeInsertCategoria($this->getUser()->getAttribute('ses_user_id'), $etiqueta);
            $creo_etiquetas="si";
            }
            $detalle_acuerdo_categoria = new TbDetalleAcuerdoCategoria();
            $detalle_acuerdo_categoria->setAcuerdoId($id_acuerdo);
            $detalle_acuerdo_categoria->setCategoriaId($etiqueta_id);
            $detalle_acuerdo_categoria->save();
            $criterio_etiqueta->clear();
        }
       }

        $obj_creator = TbUsuarioPeer::retrieveByPK($this->getUser()->getAttribute('ses_user_id'));
        $nombre_creator = $obj_creator->getNombre().' '.$obj_creator->getApePaterno();

        $lib = new myLib();
        $token   = $lib->return_token();
        $apikey = $lib->return_api_key();

        for($i=0 ;$i<count($array_correos);$i++){
            $message = $this->getMailer()->compose();
            $message->setSubject('ACEPTOR - Nuevo Acuerdo');
            $message->setTo($array_correos[$i]);
            $message->setFrom(array('no-reply@aceptor.com' => 'Practil-Aceptor' ));
            $html = $this->getPartial('util/mensaje', array(
                'domain' => sfConfig::get('app_url_aceptor'),
                'nombre_creator'=>$nombre_creator,
                'doc'=>'acuerdo',
                'token'=>$token,
                'mail'=>$array_correos[$i],
                'apikey'=>$apikey,
                'acuerdo_id'=>$id_acuerdo));
            $message->setBody($html, 'text/html');
            $this->getMailer()->send($message);
        }
  
        /* INICIO DE CORREO */
   
         /*FIN DE CORREO */

        $this->getUser()->getAttributeHolder()->remove('ses_detalle_acuerdo_contacto');
        $resultado = "1";

         if($type=="profesional"){
             if($name_file_load!="null"){
                 $this->updateEstadoCuentaPaquete();
                 $this->cloudCount = true;
             }else{
                 $this->cloudCount = false;
             }
             
         }else{
             $this->cloudCount = false;
         }

      }
      $this->resultado = $resultado;
      $this->creo_etiquetas = $creo_etiquetas;
  }


 /***********************************/
  

/*********************************************************************
                    REGISTRAR ACTA
 *********************************************************************/

public function executeRegistrar_acta(sfWebRequest $request)
{
    //Recupera Parametros
      $ses_detalle_contacto=$this->getUser()->getAttribute('ses_detalle_acta_contacto','nada');
      $ses_detalle_tarea=$this->getUser()->getAttribute('ses_detalle_acta_tarea','nada');

      $txt_acta_titulo = $request->getParameter('txt_acta_titulo');
      $rad_acta_aprobacion = $request->getParameter('rad_acta_aprobacion');
      $ipuser = $request->getParameter('userip');      
      $chk_categoria = $request->getParameter('txt_add_etiqueta_acta');

    //Validadores
      $val_string = new sfValidatorString(array('required' => true));

    //Validar datos
      $exito=0;
      $resultado = "";
      
      try {
          $val_string->clean($txt_acta_titulo);
          $this->getUser()->setFlash('msj_nombre_ok',$txt_acta_titulo);$exito++;
      } catch (sfValidatorError $e) {$this->getUser()->setFlash('msj_nombre_ko','Requerido');}


      $creo_etiquetas = "no";
      if($exito == 1 && $ses_detalle_contacto!= 'nada' && $ses_detalle_tarea!= 'nada'){
          $obj_acta = new TbActa();
          $obj_acta->setCreadorId($this->getUser()->getAttribute('ses_user_id'));
          $obj_acta->setNombre($txt_acta_titulo);
          $obj_acta->setRespuesta($rad_acta_aprobacion);
          $obj_acta->setFechaRegistro(date('Y-m-j'));
          $obj_acta->setHoraRegistro(date('g:i:s'));
          $obj_acta->setFechaHoraRegistro(date('Y-m-d H:i:s'));
          $obj_acta->setEstado('1');
          $obj_acta->save();

          $id_acta = $obj_acta->getId();
          $array_correos = array();

          // CAMPOS VACIOS
          $txt_acta_cont_nom="";$txt_acta_cont_cor="";$item=0;

          $array_creator = array($txt_acta_cont_nom,$txt_acta_cont_cor,$item);
          $ses_detalle_contacto[] = $array_creator;
          
          $cont=0;
          $estado = '1';
          foreach ($ses_detalle_contacto as $row) {
              $estado = '1';
              $cont++;
              $detalle_acta_contacto = new TbDetalleActaContacto();
              $detalle_acta_contacto->setActaId($id_acta);
              $detalle_acta_contacto->setCreadorId($this->getUser()->getAttribute('ses_user_id'));

              $criterio_buscar_usuario = new Criteria();
              $criterio_buscar_usuario->add(TbUsuarioPeer::CORREO,'%'.$row.'%',Criteria::LIKE);
              $obj_user = TbUsuarioPeer::doSelectOne($criterio_buscar_usuario);
              


              if($cont ==  count($ses_detalle_contacto)){
                $detalle_acta_contacto->setUsuarioId($this->getUser()->getAttribute('ses_user_id'));
                $detalle_acta_contacto->setNombre($this->getUser()->getAttribute('ses_user_nombre'));
                $detalle_acta_contacto->setCorreo($this->getUser()->getAttribute('ses_user_correo'));
                $detalle_acta_contacto->setIp($ipuser);
                $detalle_acta_contacto->setFechaRevision(date('Y-m-j'));
                $detalle_acta_contacto->setFechaHoraRevision(date('Y-m-d H:i:s'));
                $detalle_acta_contacto->setHoraRevision(date('g:i:s'));
                $estado='2';
              }
              elseif(is_object($obj_user)){
                    $detalle_acta_contacto->setUsuarioId($obj_user->getId());
                    $detalle_acta_contacto->setNombre($obj_user->getNombre());
                    $detalle_acta_contacto->setCorreo($obj_user->getCorreo());
                    $array_correos[] = $obj_user->getCorreo();
              }else{                  
                 //si no lo encuentro vamos a revisar si la el email esta asociado
                 //a otra cuenta
                  $criterio_buscar_usuario->clear();
                  $criterio_buscar_usuario->add(TbAssociateAccountPeer::ACCOUNTS,'%'.$row.'%',Criteria::LIKE);
                  $account = TbAssociateAccountPeer::doSelectOne($criterio_buscar_usuario);
                  
                  if(is_object($account)){
                        $detalle_acta_contacto->setUsuarioId($account->getTbUsuario()->getId());
                        $detalle_acta_contacto->setNombre($account->getTbUsuario()->getNombre());
                        $detalle_acta_contacto->setCorreo($account->getTbUsuario()->getCorreo());
                        $array_correos[] = $row;
                    }else{
                        $detalle_acta_contacto->setNombre($row);
                        $detalle_acta_contacto->setCorreo($row);
                        $array_correos[] = $row;
                    }            
              }
              $detalle_acta_contacto->setEstado($estado);
              $detalle_acta_contacto->save();
          }

          foreach ($ses_detalle_tarea as $row) {
              $array_fecha=explode('/', $row[2]);
              $fecha=$array_fecha[2].'-'.$array_fecha[1].'-'.$array_fecha[0];

              $detalle_acta_tarea = new TbDetalleActaTarea();
              $detalle_acta_tarea->setActaId($id_acta);
              $detalle_acta_tarea->setTarea($row[0]);
              $detalle_acta_tarea->setResponsable($row[1]);
              $detalle_acta_tarea->setFecha($fecha);
              $detalle_acta_tarea->save();
          }



        $array_categoria = explode(',', $chk_categoria);

        $creo_etiquetas = "no";
        $criterio_etiqueta = new Criteria();
        $etiqueta = 'todos';
        $criterio_etiqueta->add(TbDetalleUsuarioCategoriaPeer::NOMBRE_CATEGORIA,'%'.$etiqueta.'%',Criteria::LIKE);
        $criterio_etiqueta->add(TbDetalleUsuarioCategoriaPeer::USUARIO_ID,$this->getUser()->getAttribute('ses_user_id'));
        $cantidad_etiquetas = TbDetalleUsuarioCategoriaPeer::doCount($criterio_etiqueta);
        if($cantidad_etiquetas>0){
        $etiqueta = TbDetalleUsuarioCategoriaPeer::doSelectOne($criterio_etiqueta);
        $etiqueta_id = $etiqueta->getId();
        }else{
        $etiqueta_id=  $this->executeInsertCategoria($this->getUser()->getAttribute('ses_user_id'), $etiqueta);
        $creo_etiquetas="si";
        }
        $detalle_acta_categoria = new TbDetalleActaEtiqueta();
        $detalle_acta_categoria->setActaId($id_acta);
        $detalle_acta_categoria->setCategoriaId($etiqueta_id);
        $detalle_acta_categoria->save();
        $criterio_etiqueta->clear();

        ///aca sigue el resto de codigo

       if($chk_categoria!=""){
        for ($index = 0; $index < count($array_categoria); $index++) {
            $etiqueta = trim($array_categoria[$index]);
            $criterio_etiqueta->add(TbDetalleUsuarioCategoriaPeer::NOMBRE_CATEGORIA,'%'.$etiqueta.'%',Criteria::LIKE);
            $criterio_etiqueta->add(TbDetalleUsuarioCategoriaPeer::USUARIO_ID,$this->getUser()->getAttribute('ses_user_id'));
            $cantidad_etiquetas = TbDetalleUsuarioCategoriaPeer::doCount($criterio_etiqueta);

            if($cantidad_etiquetas>0){
             $etiqueta = TbDetalleUsuarioCategoriaPeer::doSelectOne($criterio_etiqueta);
             $etiqueta_id = $etiqueta->getId();
            }else{
            $etiqueta_id=  $this->executeInsertCategoria($this->getUser()->getAttribute('ses_user_id'), $etiqueta);
            $creo_etiquetas="si";
            }
            $detalle_acta_etiqueta = new TbDetalleActaEtiqueta();
            $detalle_acta_etiqueta->setActaId($id_acta);
            $detalle_acta_etiqueta->setCategoriaId($etiqueta_id);
            $detalle_acta_etiqueta->save();
            $criterio_etiqueta->clear();
        }
       }



        /**********************************************/

              

        $obj_creator = TbUsuarioPeer::retrieveByPK($this->getUser()->getAttribute('ses_user_id'));
        $nombre_creator = $obj_creator->getNombre().' '.$obj_creator->getApePaterno();


        $lib = new myLib();
        $token   = $lib->return_token();
        $apikey = $lib->return_api_key();
        
        /* INICIO DE CORREO */

        for($i=0 ;$i<count($array_correos);$i++)
        {

                $message = $this->getMailer()->compose();
                $message->setSubject('ACEPTOR - Nueva Acta');
                $message->setTo($array_correos[$i]);
                $message->setFrom(array('no-reply@aceptor.com' => 'Practil-Aceptor' ));
                $html = $this->getPartial('util/mensaje', array(
                    'domain' => sfConfig::get('app_url_aceptor'),
                    'nombre_creator'=>$nombre_creator,
                    'doc'=>'acta',
                    'token'=>$token,
                    'mail'=>$array_correos[$i],
                    'apikey'=>$apikey,
                    'acta_id'=>$id_acta));
                $message->setBody($html, 'text/html');
                $this->getMailer()->send($message);

        }


  

    
        /* FIN DE CORREO */

      $this->getUser()->getAttributeHolder()->remove('ses_detalle_acta_contacto');
      $this->getUser()->getAttributeHolder()->remove('ses_detalle_acta_tarea');

          $resultado = "1";
      }
      $this->creo_etiquetas = $creo_etiquetas;
      $this->resultado = $resultado;
  }



public function executeDelete_acuerdo(sfWebRequest $request)
{
    $hdd_acuerdo_id=$request->getParameter('hdd_acuerdo_id');
    $hdd_ip_cliente=$request->getParameter('hdd_ip_cliente');

    $criteria = new Criteria();
    $criteria->add(TbDetalleAcuerdoContactoPeer::ACUERDO_ID,$hdd_acuerdo_id);
    $criteria->add(TbDetalleAcuerdoContactoPeer::USUARIO_ID,$this->getUser()->getAttribute('ses_user_id'));
    $upd_acuerdo = TbDetalleAcuerdoContactoPeer::doSelectOne($criteria);

    $upd_acuerdo->setEstado($upd_acuerdo->getEstado().'4');
    $upd_acuerdo->save();
    
    $criteria->clear();
    $criteria->add(TbDetalleAcuerdoContactoPeer::ACUERDO_ID,$hdd_acuerdo_id);
    $list_acuerdo = TbDetalleAcuerdoContactoPeer::doSelect($criteria);
    $lst_cantidad = TbDetalleAcuerdoContactoPeer::doCount($criteria);
    $cont=0;
    foreach ($list_acuerdo as $row) {
         if($row->getEstado()=='14' || $row->getEstado()=='24' || $row->getEstado()=='34' ){
            $cont++;
        }
    }
    if($lst_cantidad==$cont){
        $rpta = "all";
    }else{
        $rpta = "null";
    }

    if($rpta == "all"){
        $this->executeDelete_cascade_acuerdo($hdd_acuerdo_id);
    }

    
    $this->rpta = $rpta;


  }


  private function executeDelete_cascade_acuerdo($idAcuerdo){

       $c = new Criteria();
       $c->add(TbAcuerdoPeer::ID,$idAcuerdo);
       $obj = TbAcuerdoPeer::doSelectOne($c);

       $c->clear();
       $c->add(TbDetalleAcuerdoCategoriaPeer::ACUERDO_ID,$idAcuerdo);
       $list = TbDetalleAcuerdoCategoriaPeer::doSelect($c);
       foreach ($list as $row){
           $row->delete();
       }
       $c->clear();

       $c->add(TbDetalleAcuerdoContactoPeer::ACUERDO_ID,$idAcuerdo);
       $list_acuerdo = TbDetalleAcuerdoContactoPeer::doSelect($c);

       foreach ($list_acuerdo as $row2){
           $row2->delete();
       }
       $c->clear();
       $obj->delete();

}


public function executeAjax_login_php_practil_associate_account_aceptor_json(sfWebRequest $request)
{

    $request->setRequestFormat('json');

    $user     = $request->getParameter('user');
    $password = $request->getParameter('token');

    $source =    sfConfig::get('app_url_practil');


    $servicio_practil = $source.'/xml_servicio_usuario/login?';
    $token= "esferadigital";
    $token = md5($token);
    $servicio_practil = $servicio_practil.'email='.$user.'&password='.$password.'&token='.$token;
    $servicio_practil = $servicio_practil.'&plataforma=aceptor';

    $lib = new myLib();
    $respuesta = file_get_contents($servicio_practil);
    $result = $lib->xml2array($respuesta);
    $items=$result['practil'];


    foreach ($items as $item){
           if(isset($item['code'])){
               if($item['code']==10006){
                    $pk_practil =   $item['id'];
               }elseif($item['code']==20004){
                   /*aca puedo obtener el token que me envia pracil*/
                   //$item['token'];
                   $pk_practil = null;
               }else{
                   $pk_practil = null;
               }
           }else{
                   $pk_practil = null;
           }
      }

      $this->pk_practil          = $pk_practil;
       $this->nombres_practil    = $item['nombre'];
        $this->apellidos_practil = $item['apellido'];
         $this->correo           = $user;
         
   

}



public function executeAjax_php_practil_asociar_acount_part_a_json(sfWebRequest $request)
{
    $request->setRequestFormat('json');


    //recibir el pkpractil
    $pk_practil = $request->getParameter('token_practil');
    $nombres_practil = $request->getParameter('name_practil');
    $apellidos_practil = $request->getParameter('last_name');
    $correo   = $request->getParameter('email');
    $email_asociate = $request->getParameter('email_associate');
    //ahora toca verificar si esta asociado a aceptor ...o
    //simplemente esta en practil

      $source =    sfConfig::get('app_url_practil');

     $servicio_practil = $source.'/xml_servicio_usuario/verificar_disponibilidad?';
     $token= "esferadigital";
     $token = md5($token);
     $servicio_practil = $servicio_practil.'email='.$correo."&plataforma_key=1&token=".$token;

     $lib = new myLib();
     $respuesta = file_get_contents($servicio_practil);
     $result = $lib->xml2array($respuesta);

     $items=$result['practil'];
      foreach ($items as $item){
           if(isset($item['code'])){
               if($item['code']!=20001){
                      if($item['code']==10002){
                          /*Usuario disponible-Actualizar(el usuario ya existe en practil
                           pero no esta asociado a aceptor)
                           *llamo al servicio que actualize al usuario(que asociara al usuario)*/
                       $con = Propel::getConnection();
                       $con->beginTransaction();
                        //primero grabo los datos localmente


                       
                       $txt_nombre      = $nombres_practil;
                       $txt_ape_paterno = $apellidos_practil;
                       $correo          = $correo;
                       $email_asociate  = $email_asociate;

                       $obj = json_decode($this->execute_registrar_usuario_aceptor($txt_nombre, $txt_ape_paterno, $correo, $email_asociate, 2 ));

                       if($obj->{'code'}==10001){
                           
                          $servicio_practil_asociar = $source.'/xml_servicio_usuario/asociar_plataforma?';
                          $token= "esferadigital";
                          $token = md5($token);
                          $servicio_practil_asociar = $servicio_practil_asociar.'&email='.$correo;
                          $servicio_practil_asociar = $servicio_practil_asociar.'&plataforma=1&token='.$token;

                          $respuesta_asociar = file_get_contents($servicio_practil_asociar);
                          $result_asociar = $lib->xml2array($respuesta_asociar);
                          $items_asociar=$result_asociar['practil'];

                          foreach ($items_asociar as $item){
                                       if(isset($item['code'])){
                                           if($item['code']==10009){
                                                $pk_practil = $item['pk'];
                                                $criteria = new Criteria();
                                                $criteria->add(TbUsuarioPeer::CORREO,'%'.$correo.'%',Criteria::LIKE);
                                                $user_correo = TbUsuarioPeer::doSelectOne($criteria);
                                                $user_correo->setIdPractil($pk_practil);
                                                $user_correo->save();
                                                
                                                $associate_account = new TbAssociateAccount();
                                                $associate_account->setTbUsuarioId($user_correo->getId());
                                                
                                                $array_list = array();
                                                $array_list[] = $email_asociate;
                                                $json = json_encode(array(
                                                                    "aceptor"  => array(
                                                                        'accounts' => $array_list           
                                                                    )));
                                                $associate_account->setAccounts($json);
                                                $associate_account->save();

                                                $con->commit();

                                                $this->executeLogin($pk_practil);                                                
                                                $this->success = true;
                                                $this->message = 'Se Registro con exito al usuario';

                                           }else{//-----ACA EVALUAR EL CODIGO DE RESPUESTA PARA SABER
                                                //POR QUE NO SE REALIZO LA TRANSACCION
                                               $con->rollBack();
                                               $this->success = false;
                                               $this->message = 'No se pudo asociar al usuario a practil...code: '.$correo;
                                           }
                                       }else{
                                          //error en el xml
                                         $con->rollBack();
                                         $this->success = false;
                                         $this->message = 'error en el xml de practil';
                                       }

                                  }


                                  }else{
                                       $con->rollBack();
                                       $this->success = false;
                                       $this->message = 'error al registrar usuario en aceptor';
                                  }
                         
                     }else{  //10008-Usuario ya existe en Practil y existe en plataflorma

                        //lo que hacemos es grabar
                          try{

                        $con = Propel::getConnection();
                        $con->beginTransaction();

                        $criteria = new Criteria();
                        $criteria->add(TbUsuarioPeer::CORREO,'%'.$correo.'%',Criteria::LIKE);
                        $usuario_aceptor = TbUsuarioPeer::doSelectOne($criteria);
                    
                        $criteria->clear();
                        $criteria->add(TbDetalleAcuerdoContactoPeer::CORREO,$email_asociate);
                        $criteria->add(TbAcuerdoPeer::ESTADO,'1');
                        $criteria->addJoin(TbDetalleAcuerdoContactoPeer::ACUERDO_ID,  TbAcuerdoPeer::ID);
                        $lst_acuerdo_contacto = TbDetalleAcuerdoContactoPeer::doSelect($criteria);

                        foreach ($lst_acuerdo_contacto as $row){                                
                                $upd_detalle_acuerdo_contact = TbDetalleAcuerdoContactoPeer::retrieveByPK($row->getId());
                                $upd_detalle_acuerdo_contact->setUsuarioId($usuario_aceptor->getId());
                                $upd_detalle_acuerdo_contact->setCorreo($usuario_aceptor->getCorreo());
                                $upd_detalle_acuerdo_contact->setNombre($usuario_aceptor->getNombre().' '.$usuario_aceptor->getApePaterno());
                                $upd_detalle_acuerdo_contact->save();
                         }

                         $criteria->clear();
                         $criteria->add(TbDetalleActaContactoPeer::CORREO,$email_asociate);
                         $criteria->add(TbActaPeer::ESTADO,'1');
                         $criteria->addJoin(TbDetalleActaContactoPeer::ACTA_ID,  TbActaPeer::ID);
                         $lst_acta_contacto = TbDetalleActaContactoPeer::doSelect($criteria);

                         foreach ($lst_acta_contacto as $row2) {                                   
                                $upd_detalle_acta_contact = TbDetalleActaContactoPeer::retrieveByPK($row2->getId());
                                $upd_detalle_acta_contact->setUsuarioId($usuario_aceptor->getId());
                                $upd_detalle_acta_contact->setCorreo($usuario_aceptor->getCorreo());
                                $upd_detalle_acta_contact->setNombre($usuario_aceptor->getNombre().' '.$usuario_aceptor->getApePaterno());
                                $upd_detalle_acta_contact->save();
                         }

                         $criteria->clear();
                         $criteria->add(TbAssociateAccountPeer::TB_USUARIO_ID,$usuario_aceptor->getId());
                         $acounts = TbAssociateAccountPeer::doSelectOne($criteria);

                         $obj = json_decode($acounts->getAccounts());
                         $array_list_aux = array();
                            foreach ($obj->{'aceptor'} as $row){
                                      foreach( $row as $file)
                                                 $array_list_aux[]= $file;
                            }                            
                     
                         $array_list_aux[] = $email_asociate;
                         $json = json_encode(array(
                                                "aceptor"  => array(
                                                    'accounts' => $array_list_aux
                                                )));
                         $acounts->setAccounts($json);
                         $acounts->save();

                         $con->commit();

                         $this->executeLogin($usuario_aceptor->getIdPractil());
                         $this->success = true;
                         $this->message = 'Se Registro con exito al usuario';

                 }catch(Exception $e){
                         $this->success = false;
                         $this->message = 'Exception error';
                 }

                    }


                    



               }
           }
      }

 


   
}




 public function executeLogin($pk_practil){


    $one_user = null;
    /* En caso los campos sean completados correctamente se verifica los accesos del usuario */

    $criteria = new Criteria();
    $criteria->add(TbUsuarioPeer::ID_PRACTIL,$pk_practil);
    $one_user = TbUsuarioPeer::doSelectOne($criteria);
    $exito=1;

    /* Verifica si el usuario existe y asi crear las sesiones y asignarle un valor
     * a la variable exito
     */
    if($one_user != null){
        $this->getUser()->setAttribute('ses_user_id',$one_user->getId());
        $this->getUser()->setAttribute('ses_user_nombre',$one_user->getNombre());
        $this->getUser()->setAttribute('ses_user_ape_pat',$one_user->getApePaterno());
        $this->getUser()->setAttribute('ses_user_ape_mat',$one_user->getApeMaterno());
        $this->getUser()->setAttribute('ses_user_correo',$one_user->getCorreo());

         $exito = 4;

        $ses_acuerdo_id=$this->getUser()->getAttribute('ses_acuerdo_id','no_id');
        $ses_acta_id   =$this->getUser()->getAttribute('ses_acta_id','no_id');

        $this->getUser()->setAuthenticated(true);
        return $one_user;
    }

    return null;

  }

public function execute_registrar_usuario_aceptor($nombre,
                                                  $apellido_paterno,                                              
                                                  $correo,$email_asociate,$verificacion){
        try {


              {
                $obj_usuario = new TbUsuario();
                $obj_usuario->setNombre($nombre);
                $obj_usuario->setApePaterno($apellido_paterno);
                $obj_usuario->setCorreo($correo);
                $obj_usuario->setFechaRegistro(date('Y-m-j'));
                $obj_usuario->setHoraRegistro(date('g:i:s'));
                $obj_usuario->setFechaHoraRegistro(date('Y-m-d H:i:s'));
                 /*23 junio 2011
                Se asigna el estado 1 (esta activo)  */
                $obj_usuario->setEstado('1');
                $obj_usuario->save();
                //Obtiene el Id del nuevo usuario
                $usuario_id =  $obj_usuario->getId();
              }

              {   ////Registra 1 Etiqueta por default al nuevo usuario

                $one_detalle_etiqueta_user = new TbDetalleUsuarioCategoria();
                $one_detalle_etiqueta_user->setUsuarioId($usuario_id);
                $one_detalle_etiqueta_user->setNombreCategoria('todos');
                $one_detalle_etiqueta_user->save();

              }

              {
                 /* Asigna los acuerdos pendientes a los usuarios */
                /*23 junio 2011
                    cuando un usuario es registrado se busca en la tabla
                       - TbDetalleAcuerdoContactoPeer
                       - TbDetalleActaContactoPeer
                    si hay algun acuerdo o algun Acta con su correo y
                    le asigno el id del usuario creado a esa tabla
                 */
                $tiene_actas_acuerdo = 1;

                $criteria = new Criteria();
                $criteria->add(TbDetalleAcuerdoContactoPeer::CORREO,$email_asociate);
                $criteria->add(TbAcuerdoPeer::ESTADO,'1');
                $criteria->addJoin(TbDetalleAcuerdoContactoPeer::ACUERDO_ID,  TbAcuerdoPeer::ID);
                $lst_acuerdo_contacto = TbDetalleAcuerdoContactoPeer::doSelect($criteria);

                foreach ($lst_acuerdo_contacto as $row){

                        $tiene_actas_acuerdo = 2;
                        $upd_detalle_acuerdo_contact = TbDetalleAcuerdoContactoPeer::retrieveByPK($row->getId());
                        $upd_detalle_acuerdo_contact->setUsuarioId($usuario_id);
                        $upd_detalle_acuerdo_contact->setCorreo($correo);
                        $upd_detalle_acuerdo_contact->setNombre($nombre.' '.$apellido_paterno);
                        $upd_detalle_acuerdo_contact->save();

                        $detalle_acuerdo_etiqueta = new TbDetalleAcuerdoCategoria();
                        $detalle_acuerdo_etiqueta->setAcuerdoId($upd_detalle_acuerdo_contact->getAcuerdoId());
                        $detalle_acuerdo_etiqueta->setCategoriaId($one_detalle_etiqueta_user->getId());
                        $detalle_acuerdo_etiqueta->save();

                }

                 /* Asigna las actas pendientes a los usuarios recien registrados  */

                $criteria = new Criteria();
                $criteria->add(TbDetalleActaContactoPeer::CORREO,$email_asociate);
                $criteria->add(TbActaPeer::ESTADO,'1');
                $criteria->addJoin(TbDetalleActaContactoPeer::ACTA_ID,  TbActaPeer::ID);
                $lst_acta_contacto = TbDetalleActaContactoPeer::doSelect($criteria);

                foreach ($lst_acta_contacto as $row2) {
                        $tiene_actas_acuerdo = 2;
                        $upd_detalle_acta_contact = TbDetalleActaContactoPeer::retrieveByPK($row2->getId());
                        $upd_detalle_acta_contact->setUsuarioId($usuario_id);
                        $upd_detalle_acta_contact->setCorreo($correo);
                        $upd_detalle_acta_contact->save();

                        $detalle_acta_etiqueta = new TbDetalleActaEtiqueta();
                        $detalle_acta_etiqueta->setActaId($upd_detalle_acta_contact->getActaId());
                        $detalle_acta_etiqueta->setCategoriaId($one_detalle_etiqueta_user->getId());
                        $detalle_acta_etiqueta->save();

                    }
              }
              {
                /* Inicializa Variables con la sesion q se crea mediante el ingreso por correo */


                /* Crea variables de sesion del usuario Registrado */
                  //siempre y cuando el usuario no necesite verificacion
                  if($verificacion==2){
                        $this->getUser()->setAttribute('ses_user_id',$obj_usuario->getId());
                        $this->getUser()->setAttribute('ses_user_nombre',$obj_usuario->getNombre());
                        $this->getUser()->setAttribute('ses_user_ape_pat',$obj_usuario->getApePaterno());
                        $this->getUser()->setAttribute('ses_user_ape_mat',$obj_usuario->getApeMaterno());
                        $this->getUser()->setAttribute('ses_user_correo',$obj_usuario->getCorreo());
                  }

             }
             {


             }
             $respt =  json_encode(array(
        "code"  =>  10001,
                "rpt"   =>  $tiene_actas_acuerdo
             ));
             return $respt;
        }catch(Exception $e){
          $respt =  json_encode(array(
        "code"  =>  20001,
                "rpt"   =>  1
             ));
          return $respt;
        }
         $respt =  json_encode(array(
        "code"  =>  20001,
                "rpt"   =>  1
             ));
        return $respt;
}


}




